// function hasCycle(obj, visited = new WeakMap()) {
//     // 如果对象已经是visited的成员，说明我们遇到了循环引用
//     if (visited.has(obj)) {
//         return true;
//     }
 
//     // 将当前对象标记为已访问
//     visited.set(obj, true);
 
//     // 检查对象的属性（假设我们只关心对象自身的可枚举属性）
//     for (let key in obj) {
//         if (obj.hasOwnProperty(key)) {
//             let value = obj[key];
 
//             // 如果属性值是对象，则递归检查
//             if (typeof value === 'object' && value !== null) {
//                 // 注意：这里我们递归调用hasCycle，并传入已经更新的visited
//                 if (hasCycle(value, visited)) {
//                     return true;
//                 }
//             }
//         }
//     }
 
//     // 如果没有发现循环依赖，返回false
//     return false;
// }
 
// // 示例使用
// let a = {};
// let b = { a: a };
// a.b = b; // 创建循环依赖
 
// console.log(hasCycle(a)); // 输出: true
// console.log(hasCycle({})); // 输出: false



function hasCycle(obj, map = new WeakMap){
    if(obj === null || typeof obj !== 'object'){
        return false
    }
    if(map.has(obj)){
        return true
    }
    map.set(obj, true)

    for(let key in obj){
        if(obj.hasOwnProperty(key)){
            const value = obj[key];
            if(typeof value === 'object' && hasCycle(value, map)){
                return true
            }
        }
    }
    return false
}
// 示例  
const aa = {c: 1};  
const bb = { aa };  
aa.bb = bb; // 创建循环依赖  
  
console.log(hasCycle(aa), 'hascycle'); // 输出: true  